<?php

/**
 * ProyectosdcController
 * 
 * @package Sgit 
 * @author Juan Manuel Martinez Carrillo
 * @copyright Juan Manuel Martinez Carrillo
 * @version 2012
 * @access public
 * @revision 17/02/2012 9:06:
 * 
 */

/**
 * 
 * SuperUser tiene acceso a todo,
 * Prl tiene activado filtro solo prl=1
 * Gma tiene activado filtro solo gma=1
 * Solo los usuarios con acceso tiene activo el enlace (grupo acceso, superuser,prl,gma)
 * 
 * 
 */


class ProyectosdcController extends Sgit_Controller_Action
{


    protected $_main_model = 'ProyectosDC';
    protected $_main_form = 'ProyectosDC';
    protected $_esSuperUser=null;
    protected $_esPrlUser=null;
    protected $_esGmaUser=null;            

    protected $_add_users_all = array(32, 34, 82 ,145);


    function _begin()
    {
        //$this->setParam('estado', "");
        $this->_element->ProyetosDCEstado =     new Sgit_Form_Element_Select_ProyetosDCEstado('estado');
        $this->_element->ProyetosDCCE =         new Sgit_Form_Element_Select_ProyetosDCCE('control_economico');
        $this->_element->DCDepartamentos =      new Sgit_Form_Element_Select_DCDepartamentos('id_departamento');
        $this->_element->ProyetosDCPrioridad =  new Sgit_Form_Element_Select_ProyetosDCPrioridad('prioridad');
    }


    protected function _rows()
    {
        //predefinir valores de filtros


        $filtros = new Sgit_Form_Filtros();
        $filtros->addFormSelect($this->_element->DCDepartamentos);
        $filtros->addFormSelect(new Sgit_Form_Element_Select_Datacenter('id_zona'));
        $filtros->addFormSelect(new Sgit_Form_Element_Select_Usuarios('jefe1', array('label' => "Responsable"), null, array('estado=?' => 1)));
        $filtros->addFormSelect($this->_element->ProyetosDCEstado);
        $filtros->addFormSelect($this->_element->ProyetosDCCE);
        $filtros->addFormSelect(new Sgit_Form_Element_Select_Year('anio'));
        $values = $this->_getFiltrosValues($filtros);
        $filtros->addPdf();
        $filtros->addExcel();
        $filtros->myRender();


        //check usuarios es plr o gma
        $validator = new Sgit_Validate_isPrl();
        if ($validator->isValid())
            $values['prl'] = 1;

        $validator = new Sgit_Validate_isGma();
        if ($validator->isValid())
            $values['gma'] = 1;


        if($this->hasFilterParams()){
            $rows = $this->_model->default->GetProyectos($values);
            
            $max_level=0;
            foreach($rows as $v){
                $max_level= ($v['level'] > $max_level) ? $v['level'] : $max_level;
            }
            $this->_max_level=$max_level;
            
            return $this->_prepareRowsToTr($rows);
        }
        
        
        
    }


    public function indexAction()
    {
       $this->_toExport();
       $this->view->rows = $this->_rows();
    }


    public function pdfAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        $pdf = new Sgit_Pdf('L');
        $pdf->setColumnas($this->_getXml());
        $pdf->SetTitle('Proyectos DC');
        $pdf->render($this->_rows(), $this->_controllerName);
    }

    public function excelAction()
    {
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        $excel = new Sgit_Excel();
        $excel->setColumnas($this->_getXml());
        $excel->render($this->_rows(), $this->_controllerName);
    }

    public function insertarAction()
    {
        $this->_insertar();
    }

    public function editarAction()
    {


        $this->_editar();


    }

    public function borrarAction()
    {
        $this->_file_upload[1] = Sgit_Util_FileUpload::run('gestion_proyectos', 'file_noc');

        if ($this->_file_upload)
        {
            foreach ($this->_file_upload as $filepload)
            {
                Sgit_Util_removeFiles::run($filepload['tabla'], $filepload['key'], $iden, 'delete');
            }
        }
        $this->_borrar();
    }

    protected function _prepareValuesToForm($row)
    {

        if (!$row['id'])
        {
            $row['accesos'] = $this->_add_users_all;
        } else
        {
            $row['accesos'] = unserialize($row['accesos']);
            $row['f_inicio'] =  Sgit_Filter_DateDbToForm::filter($row['f_inicio']);
            $row['f_entrega'] = Sgit_Filter_DateDbToForm::filter($row['f_entrega']);
            $row['f_repla'] =   Sgit_Filter_DateDbToForm::filter($row['f_repla']);
        }


        return $row;
    }


    protected function _prepareValuesToDb()
    {

        $row = $this->_form->getValues();

        $row['f_inicio'] = Sgit_Filter_DateToDb::filter($row['f_inicio']);
        $row['f_entrega'] = Sgit_Filter_DateToDb::filter($row['f_entrega']);
        $row['f_repla'] = Sgit_Filter_DateToDb::filter($row['f_repla']);


        $row['accesos'] = $this->_creaValueAccesosToDB($row['accesos'], $row['jefe1']);
        $row['objeto_cambio'] = 1;
        $row['fecha_peticion_cambio'] = date('Y-m-d');


        return $row;
    }

    function _creaValueAccesosToDB($accesos, $jefe1)
    {

        if ($accesos)
        {
            if (is_array($accesos))
            {
                $permisos = $accesos;
                $permisos[] = $jefe1;
            } else
            {
                $permisos[] = $accesos;
                $permisos[] = $jefe1;
            }
        } else
        {
            $permisos[] = $jefe1;
        }


        return serialize($permisos);
    }


    protected function _prepareValuesToTr($v)
    {

        $v['f_entrega'] = Sgit_Filter_DateDbToLocalize::filter($v['f_entrega']);
        $v['f_inicio'] = Sgit_Filter_DateDbToLocalize::filter($v['f_inicio']);
        $v['f_repla'] = Sgit_Filter_DateDbToLocalize::filter($v['f_repla']);
        $v['f_final'] = Sgit_Filter_DateDbToLocalize::filter($v['f_final']);

        $pid = 'P' . str_pad($v['id'], 4, "0", STR_PAD_LEFT);
        $v['proyecto'] = $pid . ' - ' . $v['proyecto'];
        $v['area'] =    $this->_element->DCDepartamentos->getMultiOption($v['id_departamento']);
        $v['estado'] =  $this->_element->ProyetosDCEstado->getMultiOption($v['estado']);
        $v['prioridad']=$this->_element->ProyetosDCPrioridad->getMultiOption($v['prioridad']);

        $v['cmi_text'] = Sgit_Util_SiNo::run($v['obligatorio']);
        $v['prl_text'] = Sgit_Util_SiNo::run($v['prl']);
        $v['gma_text'] = Sgit_Util_SiNo::run($v['gma']);

        $v['level']=($v['level']) ?  100*(1-($v['level']/$this->_max_level)) : 0;

        $v['permitido'] = $this->_checkPermiso($v['accesos']);
        $v['permisos'] = array(1, 2);


        return $v;
    }


    protected function _getFila($id)
    {
        $row = $this->_model->default->GetProyecto($id);
        $row = $this->_prepareValuesToTr($row);
        return $row;
    }


    public function _checkPermiso($accesos)
    {

        if(empty($accesos))$accesos=array();
        else $accesos= unserialize($accesos);
        
        
        if($this->_valid)return true;
    
        $validator = new Zend_Validate_InArray($accesos);
        if ($validator->isValid($this->_auth->getIdentity()->id))
        {
            return true;
        }

 
        //Esta en la lista de usuarios con acceso a todo
        $validator = new Zend_Validate_InArray($this->_add_users_all);
        if ($validator->isValid($this->_auth->getIdentity()->id))
        {
            return true;
        }


        
        if(is_null($this->_esSuperUser)){
            //este en la lista de acceso o que sea superuser
            $validator = new Sgit_Validate_isSuperuser();
            $this->_esSuperUser=$validator->isValid();
        }
        
        if ($this->_esSuperUser===true) return true;

        if(is_null($this->_esPrlUser)){
            //este en la lista de acceso o que sea superuser
            $validator = new Sgit_Validate_isPrl();
            $this->_esPrlUser=$validator->isValid();
        }
        
        if ($this->_esPrlUser===true) return true;
        
        if(is_null($this->_esGmaUser)){
            //este en la lista de acceso o que sea superuser
            $validator = new Sgit_Validate_isGma();
            $this->_esGmaUser=$validator->isValid();
        }
        
        if ($this->_esGmaUser===true) return true;


        return false;

    }


}
